package repertorioInstrucciones;

import comun.Natural;

import maquina.Dato;
import maquina.PilaTrabajo;

public class Modulo extends Instruccion{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public Modulo(){
		super();
	}
	@Override
	public PilaTrabajo accion(PilaTrabajo pilaT) {
		
		Dato a =  (Dato) pilaT.getPila().pop();
		Dato b =  (Dato) pilaT.getPila().pop();
		
		if(a.getDato() instanceof Integer && b.getDato() instanceof Natural){
			int n1 = ((Integer) a.getDato());
			int n2 = ( (Natural) b.getDato()).getValor();
			int res = n2 % n1;
			Dato<Integer> d = new Dato<Integer>(res);
			pilaT.getPila().push(d);
		}
		else if(a.getDato() instanceof Natural && b.getDato() instanceof Natural){
			int n1 = ((Natural)a.getDato()).getValor();
			int n2 = ((Natural)b.getDato()).getValor();
			int res = n2 % n1;
			Dato<Natural> d = new Dato<Natural>(new Natural(res));
			pilaT.getPila().push(d);
		}
		return pilaT;
	}

}
